package 
{
	//переменные:
	//переменные пользователя: 1040 - 1279, 1298 - 1503
	//переменные пользователя, доступные на чтение другим пользователем: 1298 - 1503
	//переменные пользователся доступные на запись другим пользователем: 1504 - 1535
	
	//1040 - время с получения последнего бонуса 
	//1041 - время с последнего визита
	//1042 - множитель бонуса
	//1043 - призы
	
	//1298 - количество побед
	//1299 - количество поражений
	//1300 - количество побед оффлайн
	//1301 - количество поражений оффлайн
	//1302 - текущее количество игр с ботом
	//1303 - призы в шкафу - (1 символ - ID приза, 1 символ - номер полки, 1 символ - позиция)
	
	//1504 - количество денег
	//1505 - позиция шарика
	//1506 - сколько вас победили в оффлайне
 	//1507 - сколько вам проиграли в оффлайне
	
	//1509 - количество призов, подаренных в оффлайн
	//1510 - первый приз в оффлайн
	//1511 - второй приз в оффлайн
	//1512 - третий приз в оффлайн
	//1513 - четвертый приз в оффлайн
	//1514 - пятый приз в оффлайн
	//1515 - шестой приз в оффлайн
	//1516 - седьмой приз в оффлайн
	//1517 - восьмой приз в оффлайн
	//1518 - девятый приз в оффлайн
	//1519 - десятый приз в оффлайн
	
	import flash.events.Event;
	import flash.utils.ByteArray;
	
	/**
	 * ...
	 * @author DarkGoodWIN
	 */
	public class NaperstokAPI extends KNVKAPI
	{
		public var ViewerID: int = -1;
		public var CurrentID: int = -1;
		
		private function GetIncVarAPICommand(VarInd: int, UserID: int, VarName: String, Delta: int): String
		{
			return	'var ' + VarName + '=API.getVariable({"key":' + VarInd + ', "user_id":' + UserID + '});' +
					'API.putVariable({"key":' + VarInd + ', "value":parseInt(' + VarName + ')+parseInt(' + Delta + '), "user_id":' + UserID + '});';
		}
		
		public function GetMessagesCode(): String
		{
			return 'var R=API.getVariables({"key":1506, "count":2, "user_id":' + ViewerID + '});' + 
		           'API.putVariable({"key":1506, "value":0, "user_id":' + ViewerID + '});' +
		           'API.putVariable({"key":1507, "value":0, "user_id":' + ViewerID + '});' +
				   'var R1=API.getVariables({"key":1300, "count":2, "user_id":' + ViewerID + '});' + 
		           'API.putVariable({"key":1300, "value":parseInt(R1[0].value) + parseInt(R[1].value), "user_id":' + ViewerID + '});' +
		           'API.putVariable({"key":1301, "value":parseInt(R1[1].value) + parseInt(R[0].value), "user_id":' + ViewerID + '});' +
				   'R1=API.getVariables({"key":1300, "count":2, "user_id":' + ViewerID + '});' + 
			  	   'var ServerTime=API.getVariable({"key":0, "user_id":' + ViewerID + '});' + 
   				   'var LastBonusTime=API.getVariable({"key":1040, "user_id":' + ViewerID + '});' +
				   'var AfterBonusTime=parseInt(ServerTime)-parseInt(LastBonusTime);' +
				   'var LastAccessTime=API.getVariable({"key":1041, "user_id":' + ViewerID + '});' +
				   'var WaitingBotTime=API.getVariable({"key":1302, "user_id":' + ViewerID + '});' +
			       'WaitingBotTime = parseInt(WaitingBotTime) - parseInt(ServerTime) + parseInt(LastAccessTime);' +
				   'API.putVariable({"key":1041, "value":ServerTime, "user_id":' + ViewerID + '});' +
			       'API.putVariable({"key":1302, "value":WaitingBotTime, "user_id":' + ViewerID + '});' +
				   'var Prises=API.getVariable({"key":1043, "user_id":' + ViewerID + '});' + 
				   'var PrisesOnCase=API.getVariable({"key":1303, "user_id":' + CurrentID + '});' + 
				   'return {"OfflineCount": R, "OfflineWins": R1, "AfterBonusTime": AfterBonusTime, "WaitingBotTime":WaitingBotTime, "Prises":Prises, "PrisesOnCase":PrisesOnCase};';
		}
		
		public function GetUserInfoCode(ID: int, ClearBotWaitTime: Boolean): String
		{
			var ClrBotCode: String = '';
			if (ClearBotWaitTime)
				ClrBotCode = 'API.putVariable({"key":1302, "value":1302, "user_id":' + ViewerID + '});';
			return 'var R=API.getVariables({"key":1504, "count":2, "user_id":' + ID + '});' + 
			       'var R1=API.getVariables({"key":1298, "count":4, "user_id":' + ID + '});' +
				   'var Prises=API.getVariable({"key":1043, "user_id":' + ViewerID + '});' + 
				   'var PrisesOnCase=API.getVariable({"key":1303, "user_id":' + ID + '});' + 
				   ClrBotCode + 
				   'return {"Info": R, "Wins": R1, "Prises": Prises, "PrisesOnCase": PrisesOnCase};';
		}
		
		public function UpdateBotWaitTimeCode(IncCount: int): String
		{
			return GetIncVarAPICommand(1302, ViewerID, "IncCount", IncCount) +
			       'return {"BotWaitTime": API.getVariable({"key":1302, "user_id":' + ViewerID + '})};';
		}
		
		public function ClearBotWaitTimeCode(): void
		{
			APIPutVariable(1302, '0', ViewerID, null);
		}

		public function DailyBonusCode(DeltaVal1: int, IncBonus: Boolean): String
		{
			var BonusKoefCmd: String = '';
			if (IncBonus)
				BonusKoefCmd = GetIncVarAPICommand(1042, ViewerID, 'BonusKoefCmd', 1)
			else
				BonusKoefCmd = 'API.putVariable({"key":1042, "value":0, "user_id":' + ViewerID + '});';
				
			return  BonusKoefCmd +
			       'var R=API.getVariable({"key":1504, "user_id":' + ViewerID + '});' +
			       'var MainBonus=parseInt(10 + 10 * parseInt(API.getVariable({"key":1042, "user_id":' + ViewerID + '})));' +
				   'API.putVariable({"key":1504, "value":parseInt(R)+parseInt(' + DeltaVal1 + ') + MainBonus, "user_id":' + ViewerID + '});' +
				   'var ServerTime=API.getVariable({"key":0, "user_id":' + ViewerID + '});' + 
			       'API.putVariable({"key":1040, "value":ServerTime, "user_id":' + ViewerID + '});' +
                   'return {"Money":API.getVariable({"key":1504, "user_id":' + ViewerID + '}), "MainBonus":MainBonus};';			
		}
		
		public function UpdateMoneyToServCode(Win: Boolean, TimeForBotPlayRestore: int, DeltaVal: int): String
		{
		   var MessageScript: String = UpdateStatisticCode(Win);
		   var BotWinMessage: String = BotWinCode(TimeForBotPlayRestore, Win);
           return GetIncVarAPICommand(1504, ViewerID, 'M1', DeltaVal) +
	              GetIncVarAPICommand(1504, CurrentID, 'M2', - DeltaVal) +
				  MessageScript + BotWinMessage +
				  'return {"Money":API.getVariable({"key":1504, "user_id":' + ViewerID + '}),' +
				  '        "CurrentMoney":API.getVariable({"key":1504, "user_id":' + CurrentID + '}),' +
				  '        "Wins": API.getVariables({"key":1298, "count":2, "user_id":' + ViewerID + '}),' +
				  '        "WaitingBotTime":API.getVariable({"key":1302, "user_id":' + ViewerID + '})};';
		}
		
		public function UpdateStatisticCode(Win: Boolean): String
		{
			if (Win)
				return	GetIncVarAPICommand(1507, CurrentID, 'W1', 1) +
						GetIncVarAPICommand(1298, ViewerID, 'W2', 1)
			else
				return	GetIncVarAPICommand(1506, CurrentID, 'W1', 1) +
						GetIncVarAPICommand(1299, ViewerID, 'W2', 1);
		}
		
		public function BotWinCode(TimeForBotPlayRestore: int, Win: Boolean): String
		{
			if (Win)
				return GetIncVarAPICommand(1302, ViewerID, 'BotTime', TimeForBotPlayRestore)
			else
				return "";
		}
		
		public function BayPrise(PriseInd: int, PrisePrice: int, Prises: ByteArray, OnComplite: Function): void
		{
			++Prises[PriseInd - 1];
			var S: String = StringUtils.ByteArr2String(Prises);
			var Code: String = 'API.putVariable({"key":1043, "value":"' + S + '", "user_id":' + ViewerID + '});' + 
							   GetIncVarAPICommand(1504, ViewerID, "Money", -PrisePrice) + 
							   'return{"Money":API.getVariable({"key":1504, "user_id":' + ViewerID + '}),' +
							        '"Prises": API.getVariable({"key":1043, "user_id":' + ViewerID + '}),' +
									'"PrisesOnCase": API.getVariable({"key":1303, "user_id":' + CurrentID + '})};';
			APIExecute(Code, OnComplite);
		}	
		
		public function UpdatePrisesOnCase(PrisesOnCaseStr: String): void
		{
			APIPutVariable(1303, PrisesOnCaseStr, CurrentID);
		}

		public function NaperstokAPI(flashvars: Object, aGameInfo: TGameInfo)
		{
			super(flashvars, aGameInfo);
			//APIPutVariable(1504, '2000', 34616268);
		}
	}
	
}